﻿using LM.InterfacesFabricas.DTOs;
using LM.InterfacesFabricas.Fabricas;
using LM.InterfacesFabricas.Interfaces.Servicos;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace LM.Tela.Desktop
{
    public partial class frmOperador  : Form
    {
        public frmOperador()
        {
            InitializeComponent();
        }
        
        private void btnNovo_Click(object sender, EventArgs e)
        {
            PrepareTelaParaNovoRegistro();
            txtCodigo.Focus();
        }

        private void LimpeCamposEdicao()
        {
            txtCodigo.Text = string.Empty;
            txtNomeOperador.Text = string.Empty;
            txtSenha.Text = string.Empty;
            txtConfirmaSenha.Text = string.Empty;

        }

        private void CarregueOperadoresJaCadastrados()
        {
            var servicoDeOperadores = FabricaGenerica.Crie<IServicoDeOperador>();
            var operadores = servicoDeOperadores.ConsulteTodos();

            grdOperadores.DataSource = operadores;
        }

        private void frmOperador_Load(object sender, EventArgs e)
        {
            PrepareTelaParaNovoRegistro();
        }

        private bool ValidarSenha()
        {
            if (txtSenha.Text != txtConfirmaSenha.Text)
            {
                MessageBox.Show("Confirma senha diferente da Senha informada!", "Inconsistência", MessageBoxButtons.OK, MessageBoxIcon.Warning);

                txtConfirmaSenha.Focus();

                return false;
            }

            return true;        
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            if (ValidarSenha())
            {
                int codigo;
                int.TryParse(txtCodigo.Text, out codigo);
                var operador = new DtoOperador { Codigo = codigo, Nome = txtNomeOperador.Text, Senha = txtSenha.Text };

                var servicoDeOperador = FabricaGenerica.Crie<IServicoDeOperador>();
                if (!EmEdicao())
                {
                    servicoDeOperador.Cadastre(operador);
                }
                else
                {
                    servicoDeOperador.Atualize(operador);
                }

                PrepareTelaParaNovoRegistro();
            }
        }
        private bool EmEdicao()
        {
            return !string.IsNullOrWhiteSpace(txtCodigo.Text) && txtCodigo.Enabled == false;
        }

        private void btnExcluir_Click(object sender, EventArgs e)
        {
            if (!EmEdicao())
            {
                this.ExibaInconsistencia("Operador não selecionado para edição.");
            }
            else
            {
                var servicoDeOperador = FabricaGenerica.Crie<IServicoDeOperador>();
                servicoDeOperador.Exclua(int.Parse(txtCodigo.Text));

                PrepareTelaParaNovoRegistro();
            }
        }

        private void PrepareTelaParaNovoRegistro()
        {
            LimpeCamposEdicao();
            CarregueOperadoresJaCadastrados();
            txtCodigo.Enabled = true;
            txtCodigo.Focus();
        }

        

        private void grdOperadores_CellDoubleClick_1(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                var operador = ((IList<DtoOperador>)grdOperadores.DataSource)[e.RowIndex];

                txtCodigo.Text = operador.Codigo.ToString(CultureInfo.InvariantCulture);
                txtCodigo.Enabled = false;
                txtNomeOperador.Text = operador.Nome;
            }

        }
    }
}
